Systems that obtain and remotely display application data on a client machine often transmit a large volume of information over a network connection using virtual channels. In many instances, this data can include image data, audio data, video data, configuration data, and other types of data. Typically, a single transport layer connection between a remote display client and a server may be used for all communications. One remote display client is an Independent Computing Architecture (ICA) client. In the ICA protocol, multiple “virtual streams or channels” may be used and assigned priorities, the priorities dependent on the communication latency requirements of the data within each virtual stream or channel. Multiple virtual channels may be carried by the single transport layer connection, and may be multiplexed or queued together according to the assigned priorities of the virtual channels. For example it may be desirable to maintain low latency for GUI interactions to improve human perceived responsiveness. To achieve this, GUI interaction events may be sent in the high priority virtual channel, while bulk data transfers (file copy for example) may be sent in the low priority channel. Multiplexing and queuing may occur via various algorithms, including weighted round robin with a high priority virtual channel having a greater weight than a low priority virtual channel; an immediate transmission rule for bursty high priority virtual channel data with buffering of lower priority virtual channel data; mixed first-in/first-out and first-in/last-out queuing; or any other type and form of weighting.
This prioritization of virtual channel data occurs prior to transmitting the data over the transport layer connection. As a result, while high priority virtual channels may be prioritized relative to low priority virtual channels within the same transport layer communication, the entire transport layer connection may only have a single priority, and thus, it is not possible to assign priority levels or importance levels outside of the remote session. For example, a network administrator cannot assign a priority level to a specific virtual channel on the network. Rather, the administrator can only assign a priority level to an entire remote session.
Furthermore, while there exist network products that can dynamically change the priority of the entire remote session based on the packet tags of the remote protocol, these solutions typically require the network product to look into the application, session or presentation layer data payload of the transport layer packets. Most networking equipment, such as routers and switches, cannot do this and cannot dynamically change the priority of a TCP or UDP session. Rather, the priority must be fixed.
As a result, a remote session with multiple virtual channels carrying high priority voice data, medium priority GUI data, and low priority printer data, may be transmitted via a single transport layer connection with a single priority. If this priority is high, the latency needs of the high priority data are satisfied, but the low priority data is likewise transmitted at a high priority, adversely impacting other sessions with actual high priority data. Similarly, if the transport layer connection is transmitted at a low priority, bandwidth that is efficiently used for low priority email may be insufficient for voice communications, causing latency and a negative user experience. Downsides to assigning the same priority to all network traffic generated by a remote session thus include transmitting high priority data, e.g. video and audio, at the same priority level as printer data. For example, a user may request access to a remote voice over IP application, however due to network congestion created by remote session and non-remote session traffic, the user may experience poor audio quality due to delayed data packets. While in some instances an administrator could raise the priority level of the entire remote session, the priority level necessary to mitigate the network latency affect on the VoIP application would likely cause non-remote-session and other remote session network traffic to suffer. Thus, methods and systems for assigning different priority levels or quality of service levels to individual virtual channels within a remote session are needed to improve an end user's experience.